home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / khbgi.cpp < prev    next >
C/C++ Source or Header  |  1994-10-10  |  2KB  |  85 lines

  1. #include <graphics.h>
  2. #include <alloc.h>
  3.  
  4. #include <mem.h>
  5. #include "image_p.h"
  6. #include "simple.h"
  7. #include "khbgi.h"
  8.  
  9. void bar(rect r, int col, int bak, uchar* pattern)
  10.     {
  11.     bar(r.origin.X, r.origin.Y, r.corner.X, r.corner.Y,
  12.          col, bak, pattern);
  13.     }
  14. ///////////////////////
  15. void bar(int left, int top, int right, int bottom,
  16.          int col, int bak, uchar* pattern)
  17.     {
  18.     int len;
  19.  
  20.     imageP image = (imageP)malloc((len = (right - left + 1 + 7) >> 3) << 2
  21.                                   + sizeof(imageP));
  22.     image->xmax = right - left;
  23.     image->ymax = 0;
  24.  
  25.     int len1 = len * 2;
  26.     int len2 = len * 3;
  27.  
  28.     uchar c[32];
  29.     uchar col1, col2, col3, col4;
  30.     uchar bak1, bak2, bak3, bak4;
  31.     int p = 0;
  32.     for(int k = 0; k < 32; k += 4, p++)
  33.         {
  34.         col1 = (col & 8) ? 255 : 0;
  35.         col2 = (col & 4) ? 255 : 0;
  36.         col3 = (col & 2) ? 255 : 0;
  37.         col4 = (col & 1) ? 255 : 0;
  38.  
  39.         bak1 = (bak & 8) ? 255 : 0;
  40.         bak2 = (bak & 4) ? 255 : 0;
  41.         bak3 = (bak & 2) ? 255 : 0;
  42.         bak4 = (bak & 1) ? 255 : 0;
  43.  
  44.         uchar color1 = col1 & pattern[p];
  45.         uchar color2 = col2 & pattern[p];
  46.         uchar color3 = col3 & pattern[p];
  47.         uchar color4 = col4 & pattern[p];
  48.  
  49.         uchar mask = pattern[p] ^ 255;
  50.  
  51.         uchar background1 = mask & bak1;
  52.         uchar background2 = mask & bak2;
  53.         uchar background3 = mask & bak3;
  54.         uchar background4 = mask & bak4;
  55.  
  56.         c[k] = color1 | background1;
  57.     c[k + 1] = color2 | background2;
  58.     c[k + 2] = color3 | background3;
  59.     c[k + 3] = color4 | background4;
  60.     }
  61.  
  62.     for(int i = 0; i < bottom - top + 1; i++)
  63.         {
  64.         int sh = (i % 8) * 4;
  65.         memset(image->data, c[sh], len);
  66.         memset(image->data + len, c[sh + 1], len);
  67.         memset(image->data + len1, c[sh + 2], len);
  68.         memset(image->data + len2, c[sh + 3], len);
  69.         putimage(left, top + i, image, COPY_PUT);
  70.         }
  71.     delete image;
  72.     }
  73.  
  74. /*
  75. void main()
  76.     {
  77.     int gdriver = DETECT, gmode;
  78.     initgraph(&gdriver, &gmode, "");
  79.  
  80.     uchar pattern[] = { 170, 85, 170, 85, 170, 85, 170, 85 };
  81.     bar(10, 20, 100, 200, BLACK, BLUE, pattern);
  82.  
  83.     closegraph();
  84.     }
  85. */